home *** CD-ROM | disk | FTP | other *** search
/ PC Graphics Unleashed / PC Graphics Unleashed.iso / ch18 / lightr / dat2pat.awk next >
Text File  |  1993-06-30  |  2KB  |  101 lines

  1. BEGIN {
  2.   getline
  3.   if ($1 != "v") {
  4.     print "error: bad viewing" >"/dev/stderr"
  5.     exit 1
  6.   }
  7.   getline
  8.   getline
  9.   vx = $1
  10.   vy = $2
  11.   vz = $3
  12.   print "# from", $1, $2, $3
  13.   getline
  14.   print "# up", $1, $2, $3
  15.   getline
  16.   print "# at", $1 + vx, $2 + vy, $3 + vz
  17.   getline
  18.   print "# fov", $1 / 2, $2 / 2
  19.   getline
  20.   if ($1 != 3) {
  21.     print "error: not RGB" >"/dev/stderr"
  22.     exit 1
  23.   }
  24.   getline
  25.   print "Number objects", $1
  26.   no = $1
  27.   for (o=1;o<=no;o++) {
  28.     getline
  29.     getline
  30.     getline
  31.     e = $1
  32.     if (e == 1) {
  33.       getline
  34.       er = $1
  35.       if (er > 1) er = 1
  36.       eg = $2
  37.       if (eg > 1) eg = 1
  38.       eb = $3
  39.       if (eb > 1) eb = 1
  40.     }
  41.     if (e == 0) {
  42.       er = 0
  43.       eg = 0
  44.       eb = 0
  45.     }
  46.     getline
  47.     getline
  48.     rr = $1
  49.     rg = $2
  50.     rb = $3
  51.     getline
  52.     if ($1 != 0) {
  53.       print "error: primitive not yet supported" >"/dev/stderr"
  54.       exit 1
  55.     }
  56.     print "Object obj" o, "mesh {"
  57.     print "  OWMatrix mat" o, "{ 1 0 0 0 1 0 0 0 1 0 0 0 }"
  58.     printf "  Prop prop%d { E{ %g %g %g } p{ %g %g %g } Kd{ 1 } Ks{ 0 }\n",\
  59.       o, er, eg, eb, rr, rg, rb
  60.     print "  NumMeshes 1"
  61.     print "  Mesh mesh" o, "1 {"
  62.     getline
  63.     vx1 = $1
  64.     vy1 = $2
  65.     vz1 = $3
  66.     getline
  67.     vx2 = $1
  68.     vy2 = $2
  69.     vz2 = $3
  70.     getline
  71.     vx3 = $1
  72.     vy3 = $2
  73.     vz3 = $3
  74.     getline
  75.     vx4 = $1
  76.     vy4 = $2
  77.     vz4 = $3
  78.     p0x = vx2 - vx1
  79.     p0y = vy2 - vy1
  80.     p0z = vz2 - vz1
  81.     p1x = vx4 - vx1
  82.     p1y = vy4 - vy1
  83.     p1z = vz4 - vz1
  84.     nx = p0y * p1z - p0z * p1y
  85.     ny = p0z * p1x - p0x * p1z
  86.     nz = p0x * p1y - p0y * p1x
  87.     nl = sqrt(nx * nx + ny * ny + nz * nz)
  88.     nx /= nl
  89.     ny /= nl
  90.     nz /= nl
  91.     print "  Patch norm1 4 {"
  92.     printf "    { %g %g %g } { %g %g %g }\n", nx, ny, nz, nx, ny, nz
  93.     printf "    { %g %g %g } { %g %g %g }\n", nx, ny, nz, nx, ny, nz
  94.     print "  Patch vert1 4 {"
  95.     printf "    { %g %g %g } { %g %g %g }\n", vx1, vy1, vz1, vx2, vy2, vz2
  96.     printf "    { %g %g %g } { %g %g %g }\n", vx3, vy3, vz3, vx4, vy4, vz4
  97.     print "  }"
  98.     print "}"
  99.   }
  100. }
  101.